import base64

# 自定义 Base64 表，必须是 64 个唯一字符
custom_base64_table = "ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/"

# 构建编码映射和解码映射
standard_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

# 编码映射：标准 → 自定义
encode_map = str.maketrans(standard_table, custom_base64_table)

# 解码映射：自定义 → 标准
decode_map = str.maketrans(custom_base64_table, standard_table)


def custom_base64_encode(data: bytes) -> str:
    """
    使用自定义Base64表对原始字节数据进行编码
    """
    # 使用标准 Base64 编码
    std_encoded = base64.b64encode(data).decode('utf-8')
    # 替换为自定义编码表
    custom_encoded = std_encoded.translate(encode_map)
    return custom_encoded


def custom_base64_decode(encoded: str) -> bytes:
    """
    使用自定义Base64表对字符串进行解码
    """
    # 替换为标准编码表
    std_encoded = encoded.translate(decode_map)
    # 使用标准 Base64 解码
    decoded_data = base64.b64decode(std_encoded)
    return decoded_data


# 测试示例
if __name__ == "__main__":
    original = b"Hello, World!"
    print("原始数据:", original)

    encrypted = custom_base64_encode(original)
    print("加密后的数据:", encrypted)

    decrypted = custom_base64_decode(encrypted)
    print("解密后的数据:", decrypted)
